//////////////////////////////////////////////////////////////////////////

#ifndef _BUTTON_H_
#include "button.h"
#endif

//////////////////////////////////////////////////////////////////////////

#ifndef _THEME_H_
#include "theme.h"
#endif

#ifndef _IMAGES_H_
#include "images.h"
#endif

#ifndef _COLORS_H_
#include "colors.h"
#endif

#ifndef _FONTS_H_
#include "fonts.h"
#endif

#ifndef _SOUNDS_H_
#include "sounds.h"
#endif

#ifndef _IMAGESURFACE_H_
#include "imagesurface.h"
#endif

#ifndef _TEXTSURFACE_H_
#include "textsurface.h"
#endif

#ifndef _INPUT_H_
#include "input.h"
#endif

#include <SDL\SDL.h>
#include <SDL_mixer.h>

//////////////////////////////////////////////////////////////////////////


GUI_Button::GUI_Button(GUI_Images::Image _backgrount, GUI_Fonts::Font _font, GUI_Colors::Color _color, const std::string& _text, GUI_Images::Image _hover, float _left, float _top, char _textAllign, float _horisontalMargin, float _verticalMargin)
{
    m_Background = new GUI_ImageSurface(_backgrount);
    m_Text = new GUI_TextSurface(_font, _color, _text);
    m_Hover = new GUI_ImageSurface(_hover);

    m_HasHover = false;
    m_HasFocus = false;

    m_XPosition = _left;
    m_YPosition = _top;

    m_TextAllign = _textAllign;
    m_HorisontalMargin = _horisontalMargin;
    m_VerticalMargin = _verticalMargin;
}


//////////////////////////////////////////////////////////////////////////


GUI_Button::~GUI_Button()
{
    delete m_Background;
    delete m_Text;
    delete m_Hover;
}


//////////////////////////////////////////////////////////////////////////


GUI_Button::InputResult GUI_Button::OnKeyChanged(Input* _input)
{
    Input::Key key = _input->GetKey(); 
    if (key.m_State == Input::MOUSE_RELEASED)
    {
        switch (key.m_Code)
        {
        case Input::MOUSE1:
            if (m_HasHover)
            {
                Mix_PlayChannel(-1, GUI_Theme::GetSound(GUI_Sounds::Click), 0);
                return IR_DoAction;
            }
            break;
        default:
            break;
        }
    }
    return IR_NoChanges;
}


//////////////////////////////////////////////////////////////////////////